博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-案例练习-图书管理-13-添加购物车的实现过程
阅读量:4302 次
发布时间:2019-05-27

本文共 4418 字,大约阅读时间需要 14 分钟。

这篇来做一个练习,就是图书详情页面,点击购买按钮,这本书添加到购物中。购物车中主要思想就是采用HashMap来存储数据。

 

1.需求场景

浏览器打开

显示图书列表,例如点击第一本进入该书的详情页。

点击购买,这本书被添加到购物中。

 

2.大致实现思路

这里来想一下大致实现的思路,就是product_info.jsp页面点击购买按钮,这个跳转到一个addCartServlet中,把book.id传过来,然后根据id去查询这本书,然后放入购物车页面,大致就是这么一个过程。

 

3.给购买按钮添加链接跳转

这里跳转到一个addCartServlet,关键是id需要传过来,找到product_info.jsp,找到添加这个元素位置,代码变动如下(红圈位置是代码变动)。

 

具体代码如下

 

4.创建AddCartServlet.java

这里先创建一个空的servlet文件

5.Dao/Service层代码

看看Dao层代码,由于这里我们根据id来查找图书,这个方法我们之前写过了,所以本次练习不需要更改Dao和Service层代码。

 

6.Servlet文件代码

package com.anthony.web.servlet;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				String id = request.getParameter("id");		//根据id去查找book		BookService bs = new BookServiceImpl();		Book book = bs.findBookById(id);				//从session中购物车取出来		HttpSession session = request.getSession();		Map
cart = (Map
) session.getAttribute("cart"); int num = 1; if(cart == null) { cart = new HashMap
(); } // 如果购物车中包含这本书,num就要加1 if(cart.containsKey(book)) { num = Integer.parseInt(cart.get(book)) + 1; } // 把图书放入购物车 cart.put(book, num+""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

但是上面有一个问题,在这行代码cart.containsKey(book)

Book是一个高级对象,这个引用对象比较,虽然查找出来的book 和session中的book值一样,但是地址不一样,hashmap是根据hashcode去比较,这里我们来Book.java类重写下hashCode和equal方法。

@Override	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result + ((id == null) ? 0 : id.hashCode());		return result;	}	@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		Book other = (Book) obj;		if (id == null) {			if (other.id != null)				return false;		} else if (!id.equals(other.id))			return false;		return true;	}

继续写Servlet代码,添加一个打印内容,可以点击继续购物或者点击查看购物车

package com.anthony.web.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				response.setContentType("text/html;charset=UTF-8");		PrintWriter out = response.getWriter();		String id = request.getParameter("id");		//根据id去查找book		BookService bs = new BookServiceImpl();		Book book = bs.findBookById(id);				//从session中购物车取出来		HttpSession session = request.getSession();		Map
cart = (Map
) session.getAttribute("cart"); int num = 1; if(cart == null) { cart = new HashMap
(); } // 如果购物车中包含这本书,num就要加1 if(cart.containsKey(book)) { num = Integer.parseInt(cart.get(book)) + 1; } // 把图书放入购物车 cart.put(book, num+""); // 把cart对象放回session作用域中 session.setAttribute("cart", cart); out.print("
继续购物
查看购物车"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

上面就添加了字符集设置和最后一行out输出,里面链接跳转。

下面来在cart.jsp页面中写一个循环,因为购物车列表存在多条数据的情况,下面代码主要看49-73行

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>电子书城
首页    >    购物车
序号 商品名称 价格        数量 库存 小计 取消
${vs.count} ${entry.key.name } ${entry.key.price } ${entry.key.pnum} ${entry.key.price*entry.value} X
合计:  ${total}元
    

保存代码,接下来进行部署测试

 

7.部署测试

保存代码,部署重启Tomcat服务器,然后来点击购买和查看购物车操作。

点击购买之后,跳转页面输出如下内容。

这里点击继续购物,再买一本。然后点击查看购物车。

 

转载地址:http://knows.baihongyu.com/

你可能感兴趣的文章
对于C#中使用变量的“位” 来代替不同的意思 类似于二进制
查看>>
Swift学习笔记之闭包
查看>>
C#调用WebService实例和开发
查看>>
postman的简单使用
查看>>
STM32总线结构和存储器
查看>>
CDC类
查看>>
DLL函数中内存分配及释放的问题
查看>>
jQuery 性能优化技巧
查看>>
Set
查看>>
crudandroidandroid——CRUD(在上一篇博客的基础上)
查看>>
坐标输入矩形的关系
查看>>
测试等待持续交付话题的一些讨论和心得
查看>>
IOS开发(59)之Block Object的调用
查看>>
FatMouse's Speed
查看>>
返回密码[Python]小练习 -- 模拟登陆人人网返回密码
查看>>
使用LaTeX按IEEE模板写论文时的参考文献管理方法(BibTeX使用小结)
查看>>
struts2模型驱动和属性驱动
查看>>
C++ string操作(转载)
查看>>
DUILIB 背景贴图
查看>>
JavaScript实现双向链表
查看>>